﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;
using Tema2_Adabd.BusinessLayer;

namespace Tema2_Adabd
{
    public partial class Adaugare_Produs : Form
    {
        private Utilizator utilizator;
        private bool editare;
        private List<string> categorii = new List<string>();

        private string numeProdus;

        //Constructor pentru cazul in care adaugam un produs.
        public Adaugare_Produs(Utilizator user)
        {
            InitializeComponent();
            utilizator = user;
            editare = false;
            btnAdaugaProdus.Text = "Adauga produs";
            btnAdaugaProdus.Show();
        }

        public Adaugare_Produs(Utilizator user,string numeProdus)
        {
            InitializeComponent();
            utilizator = user;
            editare = true;
            formEditare(numeProdus);
            this.numeProdus = numeProdus;
        }

        private void formEditare(string numeProdus)
        {
            btnAdaugaProdus.Text = "Salveaza editari";
            btnAdaugaProdus.Show();
        }

        private void clkAdaugaProdus(object sender, EventArgs e)
        {
            if (utilizator.numeProdusExistent(txtNumeProdus.Text)==true)
            {
                MessageBox.Show("Numele produsului nu este unic.");
                txtNumeProdus.Text = "";
                return;
            }
            try
            {
                string[] detaliiProdus = new string[11];
                if (editare == true)
                {
                    bool[] modificari = new bool[11];

                    if (txtNumeProdus.Text != "")
                    {
                        modificari[0] = true;
                        detaliiProdus[0] = txtNumeProdus.Text;
                    }
                    if (txtBrand.Text != "")
                    {
                        modificari[1] = true;
                        detaliiProdus[1] = txtBrand.Text;
                    }
                    if (txtCodUnic.Text != "")
                    {
                        modificari[2] = true;
                        detaliiProdus[2] = txtCodUnic.Text;
                    }
                    if (txtStoc.Text != "")
                    {
                        modificari[3] = true;
                        detaliiProdus[3] = txtStoc.Text;
                    }
                    if (txtDescriereClient.Text != "")
                    {
                        modificari[4] = true;
                        detaliiProdus[4] = txtDescriereClient.Text;
                    }
                    if (txtDescriereContinut.Text != "")
                    {
                        modificari[5] = true;
                        detaliiProdus[5] = txtDescriereContinut.Text;
                    }

                    if (checkBoxVarianta.Checked == true)
                    {
                        modificari[7] = true;
                        detaliiProdus[7] = txtProdusParinte.Text;
                    }
                    else
                    {
                        modificari[7] = false;
                        detaliiProdus[7] = "null";
                    }

                    if (txtNumeImagineCurenta.Text != "")
                    {
                        modificari[8] = true;
                        detaliiProdus[8] = txtNumeImagineCurenta.Text;
                    }
                    if (txtPret.Text != "")
                    {
                        modificari[6] = true;
                        detaliiProdus[6] = txtPret.Text;
                    }

                   // utilizator.salveazaProdusEditat(numeProdus,detaliiProdus,modificari);
                    utilizator.salveazaEditari(numeProdus, detaliiProdus, modificari);
                    foreach(var c in categorii)
                        utilizator.addCatProd(txtNumeProdus.Text,c);
                    MessageBox.Show("Produs editat cu succes.");
                }
                else
                {
                    verificaDateDeIntrare();

                    detaliiProdus[0] = txtNumeProdus.Text;
                    detaliiProdus[1] = txtBrand.Text;
                    detaliiProdus[2] = txtCodUnic.Text;
                    detaliiProdus[3] = txtStoc.Text;
                    detaliiProdus[4] = txtDescriereClient.Text;
                    detaliiProdus[5] = txtDescriereContinut.Text;
                    detaliiProdus[6] = txtPret.Text;
                    if (checkBoxVarianta.Checked == true)
                        detaliiProdus[7] = txtProdusParinte.Text;
                    else
                        detaliiProdus[7] = "null";
                    detaliiProdus[8] = txtNumeImagineCurenta.Text;

                    utilizator.adaugaProdus(detaliiProdus);
                    foreach (var c in categorii)
                        utilizator.addCatProd(txtNumeProdus.Text, c);
                    MessageBox.Show("Produs adaugat cu succes.");
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString());
            }
            finally
            {
                reseteazaControale();
                this.Close();
            }
        }

        private void clkCautaImagine(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "JPG|*.jpg|BMP|*.bmp|TIF|*.tif|GIF|*.gif|JPEG|*.jpeg|JIF|*.jif|PNG|*.png";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                txtNumeImagineCurenta.Text = ofd.FileName;
            }
        }

        private void clkRenunta(object sender, EventArgs e)
        {
            reseteazaControale();
            this.Close();
        }

        private void reseteazaControale()
        {
            txtBrand.Text = "";
            txtCodUnic.Text = "";
            txtDescriereClient.Text = "";
            txtDescriereContinut.Text = "";
            txtNumeImagineCurenta.Text = "";
            txtNumeProdus.Text = "";
            txtProdusParinte.Text = "";
            txtStoc.Text = "";
            txtPret.Text = "";
            txtProdusParinte.Visible = false;
            txtProdusParinte.Enabled = false;
            checkBoxMaster.Checked = false;
            checkBoxVarianta.Checked = false;
        }

        private void verificaDateDeIntrare()
        {
            if (checkBoxMaster.Checked == true && checkBoxVarianta.Checked == true)
            {
                MessageBox.Show("Nu puteti bifa ambele checkbox-uri in acelasi timp.");
                return;
            }
            if (checkBoxMaster.Checked == false && checkBoxVarianta.Checked == false)
            {
                MessageBox.Show("Trebuie sa bifati unul din cele doua checkbox-uri, Master sau varianta.");
                return;
            }
            if (txtStoc.Text == "" | txtNumeProdus.Text == "" | txtNumeImagineCurenta.Text == "" | txtDescriereContinut.Text == ""
                | txtDescriereClient.Text == "" | txtCodUnic.Text == "" | txtBrand.Text == ""| txtPret.Text=="")
            {
                MessageBox.Show("Nu ati completat toate campurile.");
                return;
            }
            if(checkBoxVarianta.Checked==true)
                if (txtProdusParinte.Text == "")
                {
                    MessageBox.Show("Nu ati completat toate campurile.");
                    return;
                }

        }

        private void clkVarianta(object sender, EventArgs e)
        {
            txtProdusParinte.Visible = true;
            txtProdusParinte.Enabled = true;
            lbProdusParinte.Visible = true;
            lbProdusParinte.Enabled = true;
        }

        private void clkVerificaCodUnic(object sender, EventArgs e)
        {
            try
            {
                if (utilizator.existaCod(txtCodUnic.Text) == true)
                    MessageBox.Show("Exista un produs inregistrat cu acest cod. Incercati altceva.");
                else
                    MessageBox.Show("Codul este unic si il puteti folosi.");
                if (utilizator.numeProdusExistent(txtNumeProdus.Text) == true)
                {
                    MessageBox.Show("Numele produsului nu este unic.");
                    txtNumeProdus.Text = "";
                    return;
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString(), "");
            }
        }

        private void clkBranduri(object sender, EventArgs e)
        {
            try
            {
                List<string> branduri=utilizator.branduriExistente();
                StringBuilder sb = new StringBuilder();
                foreach (var s in branduri)
                {
                    sb.Append(s);
                    sb.Append("\r\n");
                }
                MessageBox.Show(sb.ToString(), "BRANDURI");
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString());
            }
        }

        private void btnAdaugaCategorie_Click(object sender, EventArgs e)
        {
            if (txtCategorie.Text == "")
            {
                MessageBox.Show("Nu ati completat campul aferent categoriei.");
                return;
            }
            try
            {
                categorii.Add(txtCategorie.Text);
                txtCategorie.Text = "";
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString());
            }
        }

        private void btnVeziCategorii_Click(object sender, EventArgs e)
        {
            try
            {
                List<string> lista = utilizator.daCats();
                StringBuilder sb = new StringBuilder();
                foreach (var v in lista)
                {
                    sb.Append(v);
                    sb.Append("\r\n");
                }
                MessageBox.Show(sb.ToString());

            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString());
            }
        }

    }
}
